// 测试线程池

#include <iostream>
#include "ThreadPool.hpp"
#include "Task.hpp"
#include "Log.hpp"
#include <unistd.h>
#include <memory>

using namespace ThreadPoolModel;
using namespace TaskModel;

// int main()
// {
//     // Enable_Console_Log_Strategy();
// Enable_File_Log_Strategy
//     auto pool = std::make_unique<ThreadPool<task_t>>();

//     pool->Start();
//     // 生产任务
//     while (true)
//     {
//         sleep(1);
//         pool->Enqueue(Download);
//     }

//     pool->Stop();
//     pool->Join();
//     return 0;
// }

// 测试单例模式
// 因为单例定义的是静态的 inc 指针,所以全局有效 , 并且Get函数就会自动构建对象
// 所以只要包含了这个头文件和命名空间 , 我们用户就不用手动创建对象了
// 直接使用线程池就好了 , 因为在我们使用的时候自动就会调用内部构造函数

//单例模式很简洁使用 , 就当线程池已经存在了
int main()
{
    // 显示器打印
    Enable_Console_Log_Strategy();

    int count = 10;
    while (count--)
    {
        sleep(1);
        // 生产任务
        // 直接调用获取单例对象函数即可
        ThreadPool<task_t>::GetInstance()->Enqueue(Download);
    }

    // 停止线程池
    ThreadPool<task_t>::GetInstance()->Stop();
    // 等待线程
    ThreadPool<task_t>::GetInstance()->Join();

    return 0;
}